package com.cj.user.service.datastructure;

import org.checkerframework.checker.units.qual.K;

/**
 * @Author cheng jun
 * @Description:
 * @Date 2021/7/16 18:58
 */
/*
public class HashMap {

    */
/**
     * 大小一定是2的幂次方，为了防止hash冲突
     *//*

    private static final int DEFAULT_SIZE = 1 << 4;

    */
/**
     * 存hash表
     *//*

    private Entry<K,V>[] data;

    */
/**
     * 存的个数
     *//*

    private int size = 0;

    */
/**
     * 初始空间大小
     *//*

    private int cap;

    public HashMap() {
    }

    */
/**
     * 初始化hashmap的空间
     * @param cap
     *//*

    public HashMap(int cap) {
        if (cap > 0) {
            data = new Entry[cap];
            size = 0;
            this.cap = cap;
        }
    }

    public void put(K key, V value) {
        int hash = hash(key);
        // 新的元素插入
        Entry<K, V> newE = new Entry<K, V>(key, value, null);
        Entry<K, V> hashM = data[hash];

        // 如果长度大于8将转为红黑树
        while (null != hashM) {
            if (hashM.key.equals(key)) {
                hashM.value = value;
                return;
            }
        }
        // 如果没有就新插入，其实是链表的插入
        newE.next = data[hash];
        data[hash] = newE;
        size ++;

        // 这里还有扩容 即数量大于负载因子*空间数
    }

    public V get(K key) {
        int hash = hash(key);
        Entry<K, V> entry = data[hash];
        while (null != null) {
            if (entry.key.equals(key)) {
                return entry.value;
            }
        }
        return null;
    }

    */
/**
     * 就是jdk hash的源码(为了散列)
     * @param key
     * @return
     *//*

    private int hash(K key) {
        int h = 0;
        if (null == key) {
            h = 0;
        } else {
            h= key.hashCode() ^ (h >>> 16);
        }
        return h % cap;
    }


    private class Entry<K,V> {
        K key;
        V value;
        Entry<K,V> next;
        */
/**
         * 表示个数
         *//*

        int cap;
        public Entry(K key, V value, Entry<K,V> next) {
            this.key = key;
            this.value = value;
            this.next = next;
        }
    }
}
*/
